package ec.com.avila.emision.web.backings;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;
import org.primefaces.event.RowEditEvent;
import ec.com.avila.emision.web.beans.ClienteBean;
import ec.com.avila.hiperion.entities.Catalogo;
import ec.com.avila.hiperion.entities.Cliente;
import ec.com.avila.hiperion.entities.DetalleCatalogo;
import ec.com.avila.hiperion.entities.Persona;
import ec.com.avila.hiperion.servicio.CatalogoService;
import ec.com.avila.hiperion.servicio.ClienteService;
import ec.com.avila.hiperion.servicio.DetalleCatalogoService;
import ec.com.avila.hiperion.servicio.PersonaService;

@ManagedBean
@ViewScoped
public class ClienteBacking implements Serializable {

	private static final long serialVersionUID = 1L;

	@ManagedProperty(value = "#{clienteBean}")
	private ClienteBean clienteBean;

	@EJB
	private PersonaService personaService;
	@EJB
	private ClienteService clienteService;
	@EJB
	private CatalogoService catalogoService;
	@EJB
	private DetalleCatalogoService detalleCatalogoService;

	private List<Persona> personas;
	private List<Cliente> clientes;
	private List<Persona> filtroPersona;

	private List<SelectItem> tipoPersonaItems;
	private List<SelectItem> identificacionItems;
	private List<SelectItem> provinciasItems;
	private List<SelectItem> ciudadesItems;

	private Boolean activarIdentificacion;

	private int longitudIdentificacion;

	@PostConstruct
	void inicializar() {
		// setPersonas(personaService.consultarPersonas());
		setClientes(clienteService.consultarClientes());
		setActivarIdentificacion(true);
	}

	public void editListener(RowEditEvent event) {
		Cliente cliente = (Cliente) event.getObject();
		Persona persona = cliente.getPersona();
		clienteService.modificarCliente(cliente);
		personaService.modificarPersona(persona);
	}

	public List<SelectItem> getTipoPersonaItems() {
		this.tipoPersonaItems = new ArrayList<SelectItem>();
		Catalogo catalogo = catalogoService.consultarCatalogoById(1);
		List<DetalleCatalogo> tiposPersona = catalogo.getDetalleCatalogos();

		for (DetalleCatalogo detalle : tiposPersona) {
			SelectItem selectItem = new SelectItem(detalle.getCodDetalleCatalogo(), detalle.getDescripcion());
			tipoPersonaItems.add(selectItem);
		}

		return tipoPersonaItems;
	}

	public List<SelectItem> getIdentificacionItems() {
		this.identificacionItems = new ArrayList<SelectItem>();
		Catalogo catalogo = catalogoService.consultarCatalogoById(2);
		List<DetalleCatalogo> tiposPersona = catalogo.getDetalleCatalogos();

		for (DetalleCatalogo detalle : tiposPersona) {
			SelectItem selectItem = new SelectItem(detalle.getCodDetalleCatalogo(), detalle.getDescripcion());
			identificacionItems.add(selectItem);
		}

		return identificacionItems;
	}

	public List<SelectItem> getProvinciasItems() {
		this.provinciasItems = new ArrayList<SelectItem>();
		Catalogo catalogo = catalogoService.consultarCatalogoById(3);
		List<DetalleCatalogo> provincias = catalogo.getDetalleCatalogos();

		for (DetalleCatalogo detalleCatalogo : provincias) {
			SelectItem selectItem = new SelectItem(detalleCatalogo.getCodDetalleCatalogo(), detalleCatalogo.getDescripcion());
			provinciasItems.add(selectItem);
		}

		return provinciasItems;
	}

	public void obtenerCiudadesPorProvincia(String codigoProvincia) {
		this.ciudadesItems = new ArrayList<SelectItem>();
		if (codigoProvincia != null) {
			// List<DetalleCatalogo> ciudades = detalleCatalogoService.consultarDetalleCatalogoByCodDependencia(4, codigoProvincia);
			// for (DetalleCatalogo detalleCatalogo : ciudades) {
			// SelectItem selectItem = new SelectItem(detalleCatalogo.getCodDetalleCatalogo(), detalleCatalogo.getDescripcion());
			// ciudadesItems.add(selectItem);
			// }
		}
	}

	public void selectTipoPersona(Integer tipoPersona) {
		setActivarIdentificacion(false);
		if (tipoPersona == 100) {
			clienteBean.setTipoIdentificacion("100");
			setLongitudIdentificacion(10);
		} else if (tipoPersona == 200) {
			clienteBean.setTipoIdentificacion("200");
			setLongitudIdentificacion(13);
		}
	}

	public void guardarCliente() {
		// Primero: se regitra la informacion de la Persona
		Persona persona = new Persona();
		// Se guarda la identificacion del Cliente
		persona.setTipoidentificacion(clienteBean.getTipoIdentificacion());
		persona.setIdentificacion(clienteBean.getIdentificacion());
		persona.setNombre(clienteBean.getNombre());
		persona.setApellidoPaterno(clienteBean.getApePaterno());
		persona.setApellidoMaterno(clienteBean.getApeMaterno());
		persona.setFechaNacimiento(clienteBean.getFechaNacimiento());
		if (clienteBean.getDireccionDomicillo() != null) {
			persona.setDireccion((clienteBean.getDireccionDomicillo()));
		}
		if (clienteBean.getTelefonoDomicillo() != null) {
			persona.setTelefonoDomicillo(clienteBean.getTelefonoDomicillo());
		}
		if (clienteBean.getCelular() != null) {
			persona.setTelefonoMovil(clienteBean.getCelular());
		}
		if (clienteBean.getEmail() != null) {
			persona.setEmail(clienteBean.getEmail());
		}

		// Segundo: Se registra la informacion del cliente
		Cliente cliente = new Cliente();
		cliente.setPersona(persona);
		cliente.setTipoPersona(clienteBean.getTipoPersona());
		cliente.setProvincia(clienteBean.getCodigoProvincia());
		cliente.setCiudad(clienteBean.getCodigoCiudad());
		if (clienteBean.getRazonSocial() != null) {
			cliente.setRazonSocial(clienteBean.getRazonSocial());
		}
		if (clienteBean.getDireccionCobro() != null) {
			cliente.setDireccionCobro(clienteBean.getDireccionCobro());
		}
		if (clienteBean.getTelefonoCobro() != null) {
			cliente.setTelefonoCobro(clienteBean.getTelefonoCobro());
		}
		if (clienteBean.getDireccionOficina() != null) {
			cliente.setDireccionOficina(clienteBean.getDireccionOficina());
		}
		if (clienteBean.getTelefonoOficina() != null) {
			cliente.setTelefonoOficina(clienteBean.getTelefonoOficina());
		}
		if (clienteBean.getEmail() != null) {
			cliente.setEmail(clienteBean.getEmail());
		}
		if (clienteBean.getActividadProfecion() != null) {
			cliente.setActividadProfecion(clienteBean.getActividadProfecion());
		}
		if (clienteBean.getGiroNegocio() != null) {
			cliente.setGiroNegocio(clienteBean.getGiroNegocio());
		}

		clienteService.guardarCliente(cliente);

	}

	public ClienteBean getClienteBean() {
		return clienteBean;
	}

	public void setClienteBean(ClienteBean clienteBean) {
		this.clienteBean = clienteBean;
	}

	public List<Persona> getPersonas() {
		return personas;
	}

	public void setPersonas(List<Persona> personas) {
		this.personas = personas;
	}

	public List<Persona> getFiltroPersona() {
		return filtroPersona;
	}

	public void setFiltroPersona(List<Persona> filtroPersona) {
		this.filtroPersona = filtroPersona;
	}

	public List<SelectItem> getCiudadesItems() {
		return ciudadesItems;
	}

	public void setTipoPersonaItems(List<SelectItem> tipoPersonaItems) {
		this.tipoPersonaItems = tipoPersonaItems;
	}

	public Boolean getActivarIdentificacion() {
		return activarIdentificacion;
	}

	public void setActivarIdentificacion(Boolean activarIdentificacion) {
		this.activarIdentificacion = activarIdentificacion;
	}

	public int getLongitudIdentificacion() {
		return longitudIdentificacion;
	}

	public void setLongitudIdentificacion(int longitudIdentificacion) {
		this.longitudIdentificacion = longitudIdentificacion;
	}

	public List<Cliente> getClientes() {
		return clientes;
	}

	public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
	}
}
